package controller.editorcontroller;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JTextField;

import model.editormodel.EditorModel;

import view.editorview.EditorArea;

/**
 * Listener der auf das Druecken der Enter-Taste reagiert, wenn man eine Lampe
 * bzw einen Schalter umbenennen will und dies damit bestaetigt.
 * 
 * @author Team Locsi
 * 
 */
public class SwitchLampRenameEnterListener implements KeyListener {

	/**
	 * Referenz auf das angezeigte Textfeld
	 */
	private JTextField nameField;

	/**
	 * Referenz auf das EditorModel ueber das das umbenennen ausgefuehrt wird
	 */
	private EditorModel eModel;

	/**
	 * Referenz auf die EditorArea auf der das Textfeld liegt
	 */
	private EditorArea eArea;

	/**
	 * Der alte Name des Schalters/der Lampe
	 */
	private String oldNameForRename;

	/**
	 * Dieser Konstruktor erzeugt ein neues
	 * <code>SwitchLampRenameEnterListener</code>-Objekt.
	 * 
	 * @param nameField
	 *            <code>JTextField</code> - Referenz auf das angezeigte Textfeld
	 * @param eModel
	 *            <code>EditorModel</code> - Referenz auf das EditorModel
	 * @param eArea
	 *            <code>EditorArea</code> -Referenz auf die EditorArea
	 * @param oldNameForRename
	 *            <code>String</code> - alter Name des Schalters oder Lampe
	 */
	public SwitchLampRenameEnterListener(JTextField nameField,
			EditorModel eModel, EditorArea eArea, String oldNameForRename) {
		this.nameField = nameField;
		this.eModel = eModel;
		this.eArea = eArea;
		this.oldNameForRename = oldNameForRename;
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// wird nicht benoetigt
	}

	/**
	 * Diese Methode veraendert den Namen eines Schalters oder Lampe, falls der
	 * eingegebene Name schon vergeben ist, wird dies in der InfoArea angezeigt.
	 */
	@Override
	public void keyReleased(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			if (nameField.getText().trim().length() > 0
					&& !eModel.renameElement(oldNameForRename, nameField
							.getText().trim())) {
				eArea.getiArea().addInfoText(
						"Name '" + nameField.getText() + "' schon vergeben!");
			} else {
				eArea.remove(nameField);
				nameField = null;
			}
		}
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// wird nicht benoetigt
	}
}
